﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RRHH.Entities;
using System.Data.SqlClient;
using System.Data;
using System.Messaging;

namespace RRHH.DataAccess
{
    public class DAOAcceso
    {
        public BEAcceso ValidarUsuario(BEAcceso _usuario, ref int cantidad)
        {
            BEAcceso oUsuario = null;
            cantidad = 0;
            try
            {
                StringBuilder sqlBuilder = new StringBuilder();
                string sql = "SELECT ID_USUARIO, USUARIO, CLAVE  FROM USUARIO WHERE USUARIO = @usuario AND CLAVE = @clave ";

                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.Parameters.Add(new SqlParameter("@usuario", _usuario.USUARIO));
                sqlCommand.Parameters.Add(new SqlParameter("@clave", _usuario.CLAVE));

                sqlCommand.CommandText = sql;

                using (DataAccess adoDataService = new DataAccess())
                {
                    IDataReader dr = adoDataService.ExecuteReader(sqlCommand);

                    if (dr.Read())
                    {
                        oUsuario = new BEAcceso();
                        oUsuario.ID_USUARIO = Convert.ToInt32(dr["ID_USUARIO"]);
                        oUsuario.USUARIO = Convert.ToString(dr["USUARIO"]);
                        oUsuario.CLAVE = Convert.ToString(dr["CLAVE"]);
                    }

                    dr.Close();
                    adoDataService.Dispose();

                    if (oUsuario != null)
                        cantidad = ConsultarContratos();

                }
            }
            catch (Exception)
            {
                cantidad = 0;
                return null;
            }

            return oUsuario;

        }


        public int ConsultarContratos()
        {
            int cantidad = 0;
            try
            {
                List<BEContrato> LstContratos = new List<BEContrato>();

                SqlCommand sqlCommand = new SqlCommand("SP_CONSULTAR_CONTRATOS");
                sqlCommand.CommandType = CommandType.StoredProcedure;

                using (DataAccess adoDataService = new DataAccess())
                {
                    IDataReader dr = adoDataService.ExecuteReader(sqlCommand);

                    while (dr.Read())
                    {
                        BEContrato oContrato = new BEContrato();
                        oContrato.IDCONTRATO = Convert.ToInt32(dr["IDCONTRATO"]);
                        oContrato.CODIGOEMPLEADO = Convert.ToString(dr["CODIGOEMPLEADO"]);
                        oContrato.IDPERSONAL = Convert.ToInt32(dr["IDPERSONAL"]);
                        LstContratos.Add(oContrato);
                    }
                    dr.Close();
                    adoDataService.Dispose();
                }

                if (LstContratos.ToList().Count() > 0)
                {
                    cantidad = LstContratos.ToList().Count();
                    string rutaColaIn = @".\private$\ContratosVen";
                    if (!MessageQueue.Exists(rutaColaIn))
                        MessageQueue.Create(rutaColaIn);

                    MessageQueue colaIn = new MessageQueue(rutaColaIn);

                    foreach (var bean in LstContratos.ToList())
                    {
                        Message mensajeIn = new Message();
                        mensajeIn.Label = "Contrato Vencido";

                        mensajeIn.Body = new BEContrato { IDCONTRATO = bean.IDCONTRATO, CODIGOEMPLEADO = bean.CODIGOEMPLEADO, IDPERSONAL = bean.IDPERSONAL };
                        colaIn.Send(mensajeIn);
                    }
                }

            }
            catch (Exception)
            {
                return 0;
            }

            return cantidad;
        }


    }
}
